package com.example.examplebitmappool.impl;

import android.graphics.Bitmap;
import android.util.Log;
import android.util.LruCache;

import com.example.examplebitmappool.BitmapPool;

import java.util.TreeMap;

/**
 * author：sunweihao
 * 创建时间：2020/12/27 15:04
 * Describe：这个是复用池的实现类
 */
/*public class BitmapImpl extends
        LruCache<Integer,Bitmap> //键对值key，value
        implements BitmapPool {
    private static final String TAG = "BitmapImpl";

    //为了筛选出合适的bitmap容器
    private TreeMap<Integer,String> treeMap=new TreeMap<>();
    public BitmapImpl(int maxSize) {
        super(maxSize);
    }

    @Override
    public void put(Bitmap bitmap) {
        //todo 条件一bitmap.isMutable()==true，即它是可变的
        if (!bitmap.isMutable()) {//isMutable的true 表示可变
            Log.d(TAG, "put: 条件一 比天麻片.isMutable()==true 不满足，不能存入复用池");
        }
        // 条件二，
        //计算bitmap的大小
        int bitmapSize = getBitmapSize(bitmap);
        if (bitmapSize>=maxSize()) {
            Log.d(TAG, "put: 条件二 大于maxsize了， 不满足所以不能存入复用池");//疑惑
            return;
        }
        //TODO bitmap 存入LruCache,这个put是父类的方法
        put(bitmapSize,bitmap);
        //todo 存入 筛选 容器
        treeMap.put(bitmapSize,null);//疑惑
    }

    private int getBitmapSize(Bitmap bitmap) {
        return 0;
    }

    *//**
     * 获取可用复用的bitmap
     * @param width bitmap的宽度
     * @param height bitmap的高度
     * @param config 每一像素的大小
     * @return
     *//*
    @Override
    public Bitmap get(int width, int height, Bitmap.Config config) {
        *//**
         * Bitmap.Config.ALPHA_8; 理论实际上Android自动做处理的 只有透明度 8位 一个字节
         * Bitmap.Config.RGB_565; 理论实际上Android自动做处理的 红色5位 绿色6位 蓝色5位 没有透明度 2字节
         * Bitmap.Config.ARGB_4444; 理论实际上Android自动做处理的 透明，红色，绿色，蓝色：4,4,4,4 16位，即2字节
         * Bitmap.Config.ARGB_8888; 理论实际上Android自动做处理的 透明，红色，绿色，蓝色：8,8,8,8 32位，即4字节
         *//*
        //获取bitmap的大小，      常用 ARGB_4444，ARGB_8888
        int getSize = width * height * (config == Bitmap.Config.ARGB_8888 ? 4 : 2);//如果是就为4字节，不是就为2字节
        //查到容器里面跟getSize一样大的，或者比getSize还要大的
        Integer key = treeMap.ceilingKey(getSize);
        //如果treeMap还没有put，那么一定是null
        if (key==null) {
            return null;//没有找到合适的可以复用的key
        }
        //从容器中获取的key，必须小于计算出来的（getSize*2）：获取太大的bitmap不好：疑惑
        if (key<=(getSize*2)) {
            Bitmap remove=remove(key);//复用池，如果要取出来，肯定要移除，不想给其他地方用了
            Log.d(TAG, "get: 从复用池 里面获取了Bitmap……");
            return  remove;
        }
        if (config== Bitmap.Config.ARGB_8888)
        return null;
    }
}*/
